package com.wsestadio.dao.impl;

import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
import com.wsestadio.dao.AsientoDAO;
import com.wsestadio.dao.base.AsientoDAOBase;
import com.wsestadio.dominio.Asiento;
import com.wsestadio.util.DAO;
import com.wsestadio.dominio.Estadio;


@Repository("AsientoDAO")
public class AsientoDAOImpl extends DAO<Asiento> implements AsientoDAO {

	private static final Logger logger = LoggerFactory.getLogger(AsientoDAOImpl.class);
	
	private AsientoDAOBase asientoDAOBase;
	
	@Override
	public void setBasicGenericService() {
		asientoDAOBase = new AsientoDAOBase(em);
	}

	@Override
	public AsientoDAOBase getBasicService() {
		return asientoDAOBase;
	}

	
	@Override
	@SuppressWarnings("unchecked")
	public List<Asiento> getAsientosPorEstadio(Estadio estadio) throws Exception {
		sqlQuery = "select new Asiento(p.id) from Asiento p " + " where " + "p.estadio = :id   ";
		q = em.createQuery(sqlQuery);
		q.setParameter("id", estadio.getId());
		List<Asiento> p = q.getResultList();
		if(p!=null){
			return p;
		}else{
			throw new Exception("No hay regsitros.");
		}
	}

	@Override
	public void deleteAsientosPorEstadios(Estadio estadio) throws Exception{
		try {
			sqlQuery = "{call  PACK_ASIENTO.eliminar_asiento_por_estadio(:idEstadio)}";
			logger.debug("sqlQuery:"+sqlQuery);
			q = em.createNativeQuery(sqlQuery);
	        q.setParameter("idEstadio", estadio.getId());
			int resp = q.executeUpdate();
			logger.debug("resp:"+resp);
			if(resp != 1){
				throw new Exception("Error al executar el procedimiento.");
			}
		} catch (Exception e) {
			logger.error("Error al invocar el procedimiento:"+e.getLocalizedMessage(),e);
			throw new Exception("Error al invocar el procedimiento:"+e.getLocalizedMessage());
		}
	}



	
	
}
